<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html>
<head>
<title>Menüs und Werkzeugleisten in PyQt4</title>
<link rel="stylesheet" href="../format.css" type="text/css">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="keywords" content="PyQt, PyQt4, menus, toolbars, tutorial, python, Linux">
<meta nam="description" content="Menüs und Werkzeugleisten in PyQt4">
<meta name="language" content="de">
<meta name="author" content="Jan Bodnar">
<meta name="distribution" content="global">
<meta name="translator" content="manuel stein">
</head>

<body>

<div class="content">


<a href="/" title="Home">Home</a>&nbsp;
<a href=".." title="Home">Contents</a>


<h1>Menüs und Werkzeugleisten in PyQt4</h1>

<h3>Hauptfenster</h3>

<p>
Die <em>QMainWindow-Klasse</em> liefert das Hauptfenster der Anwendung und bietet uns das 
klassische Skelett mit einer Statusleiste, Werkzeugleisten und einer Menüleiste.
</p>

<h3>Statusleiste</h3>
<p>
Die Statusleiste ist ein Widget, das zur Darstellung von Statusinformationen verwendet wird.
</p>

<pre class="code">
#!/usr/bin/python

# statusbar.py 

import sys
from PyQt4 import QtGui

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(250, 150)
        self.setWindowTitle('statusbar')

        self.statusBar().showMessage('Ready')


app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
</pre>

<pre class="explanation">
 self.statusBar().showMessage('Ready')
</pre>

<p>
Um die Statusleiste zu bekommen, rufen wir die <em>statusBar()</em>-Methode der QApplication auf. 
<em>showMessage()</em> zeigt Nachrichten auf der Statusbar an.
</p>

<h3>Menuleiste</h3>

<p>
Menüleisten sind mit der sichtbarste Teil grafischer Anwendungen. Dabei 
handelt es sich um eine Gruppe von Anweisungen, die in diversen Menüs 
zusammengefasst sind. Während man sich in Konsolenanwendungen all die
<q>arkanen</q> Kommandos merken muss, finden wir in Menüs die meisten
Anweisungen in logische Abschnitte gruppiert vor. Dabei gibt es anerkannte
Standards, die den Aufwand, sich in eine neue Anwendung einzuarbeiten, reduzieren.
</p>

<pre class="code">
#!/usr/bin/python

# menubar.py 

import sys
from PyQt4 import QtGui, QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(250, 150)
        self.setWindowTitle('menubar')

        exit = QtGui.QAction(QtGui.QIcon('icons/exit.png'), 'Exit', self)
        exit.setShortcut('Ctrl+Q')
        exit.setStatusTip('Exit application')
        self.connect(exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))

        self.statusBar()

        menubar = self.menuBar()
        file = menubar.addMenu('&File')
        file.addAction(exit)

app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
</pre>

<pre class="explanation">
 menubar = self.menuBar()
 file = menubar.addMenu('&File')
 file.addAction(exit)
</pre>

<p>
Als erstes erzeugen wir eine Menüleiste mittels der <em>menuBar()</em>-Methode der <em>QMainWindow</em>-Klasse.
Dann fügen wir ein Menü mit Hilfe der <em>AddMenu()</em>-Methode hinzu.
Schließlich bauen wir das Aktionsobjekt in das Datei-Menü ein.
</p>

<h3>Werkzeugleiste</h3>

<p>
Menüs gruppieren alle Kommandos, die man in einer Anwendung benutzen kann.
Werkzeugleisten bieten Schnellzugriff auf die am häufigsten verwendeten Kommandos.
</p>

<pre class="code">
<code>
#!/usr/bin/python

# toolbar.py 

import sys
from PyQt4 import QtGui, QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(250, 150)
        self.setWindowTitle('toolbar')

        self.exit = QtGui.QAction(QtGui.QIcon('icons/exit.png'), 'Exit', self)
        self.exit.setShortcut('Ctrl+Q')
        self.connect(self.exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))

        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(self.exit)


app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
</code>
</pre>

<pre class="explanation">
 self.exit = QtGui.QAction(QtGui.QIcon('icons/exit.png'), 'Exit', self)
 self.exit.setShortcut('Ctrl+Q')
</pre>

<p>
Grafische Anwendungen werden durch Anweisungen gesteuert. Diese Kommandos können über ein Menü, 
ein Kontextmenü, eine Werkzeugleiste, ein Icon oder eine Tastenkombination aufgerufen werden. 
PyQt vereinfacht die Entwicklung durch die Einführung von <em>Aktionen</em>. Ein action-Objekt
kann Menütext, ein Icon, eine Tastenkombination, Statusinformationen, Hilfe-Text und einen 
Tooltip enthalten. In unserem Beispiel definieren wir ein action-Objekt mit einem Icon, 
einem Tooltip und einer Tastenkombination.
</p>

<pre class="explanation">
 self.connect(self.exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))
</pre>

<p>
Hier verbinden wir das <em>triggered()</em>-Signal der Aktion mit dem vordefinierten <em>close()</em>-Signal.
</p>

<pre class="explanation">
 self.toolbar = self.addToolBar('Exit')
 self.toolbar.addAction(self.exit)
</pre>

<p>
An dieser Stelle erzeugen wir eine Werkzeugleiste und verbinden ein action-Objekt damit.
</p>

<img src="../images/toolbar.jpg" alt="Werkzeugleiste">
<p class="figure">Abbildung: Werkzeugleiste</p>

<h3>Zusammenbauen</h3>

<p>
Im letzten Beispiel dieses Abschnitts erzeugen wir eine Menüleiste, eine Werkzeugleiste und eine Statusleiste. 
Zudem erzeugen wir ein zentrales Widget.
</p>

<pre class="code">
#!/usr/bin/python

# mainwindow.py 

import sys
from PyQt4 import QtGui, QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(350, 250)
        self.setWindowTitle('mainwindow')

        textEdit = QtGui.QTextEdit()
        self.setCentralWidget(textEdit)

        exit = QtGui.QAction(QtGui.QIcon('icons/exit.png'), 'Exit', self)
        exit.setShortcut('Ctrl+Q')
        exit.setStatusTip('Exit application')
        self.connect(exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))

        self.statusBar()

        menubar = self.menuBar()
        file = menubar.addMenu('&File')
        file.addAction(exit)

        toolbar = self.addToolBar('Exit')
        toolbar.addAction(exit)


app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
</pre>

<pre class="explanation">
 textEdit = QtGui.QTextEdit()
 self.setCentralWidget(textEdit)
</pre>

<p>
Wir erzeugen ein Textbearbeitungs-Widget und machen es zum Hauptwidget 
des <em>QMainWindow</em>. Das zentrale Widget nimmt allen verfügbaren Raum ein.
</p>

<img src="../images/mainwindow.jpg" alt="Hauptfenster">
<p class="figure">Abbildung: Hauptfenster</p>

<div class="footer">
<div class="signature">
<a href="/">ZetCode</a> last modified September 28, 2007  <span class="copyright">&copy; 2007 - 2011 Jan Bodnar</span>
<span class="copyright">Translation © 2009 Manuel Stein</span>
</div>
</div>

</div> <!-- content -->
</body>
</html>

